#pragma once
#include "Emitter.h"
#include "../EventManager.h"
/**
=========================
Updates and draws particles
=========================
*/
class ParticleManager : public IEventListener
{
public:
    ParticleManager(void);

    /** Update the Emitters */
    void Update(long dt);

    /** Render the Emitters */
    void Render(IRender* r, ICamera* cam);

    /* Get the Name of the Listener */
    std::string GetName() { return "particle_manager"; };
    /** Get Listener Type - Events this listener listens too */
    int GetListenerType() { return LT_PARTICLEMNG; };

    /** Handle an event */
    bool HandleEvent( IEvent* e );

    /** Add an Emitter */
    void AddEmitter( const Emitter &e ) { m_emitters.push_back( e ); };
    /** Remove an emitter */
    void RemoveEmitter( Emitter &e );

    typedef std::list<Emitter> type_Emit;
    type_Emit m_emitters;
public:
    virtual ~ParticleManager(void);
};


/*------------------------------------------------
    Particle Event Data
-------------------------------------------------*/
class ParticleData : public IEventData
{
public:
    ParticleData( const Emitter &em ) : m_emitter( em ) { };
    Emitter m_emitter;
    IEventData* Copy() { return new ParticleData( m_emitter ); };
    virtual ~ParticleData() { };

};